%本文件用于展示对程序做出的改进
addpath version_before;
addpath functions;
global P J I ci cI r LAMBDA
%载入figure 2所用数据
P = [.1, .5, .9]; % for test only
LAMBDA = 3;
ci=40;cI=200;r=100;
J = 3; I = 8;
genPoisson(48);
load('j_all_all.mat'); 
j_all = j_all_all(1, :);
N=48;

%version1
%使用了findQ_v1
    %使用隔板法计算Q。
    %findQ_v1使用了findPIE_v1、prunePIE两个程序。
%使用了findR_v1
    %根据论文提供方法计算。
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy_v1(j_all,N);
fprintf("\n\n Prop_Policy_v1 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy_v1测试结果为19.4s。


%version2
%使用了findQ_v2
    %使用隔板法计算Q，但将重复计算PIE的部分利用genPIE制成了函数表，在需多次运行prop_policy的情况下大大加快计算速度。
    %findQ_v2在运行前需提前运行genPIE，且使用了prunePIE程序。
%使用了findR_v1
genPIE(N);
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy_v2(j_all,N);
fprintf("\n\n Prop_Policy_v2 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy_v2测试结果为2.0s。


%version3
%使用了findQ2_v1
    %根据论文中递推法计算Q，并根据findQ2的用法改写prop_policy与prop_policy2
%使用了findR_v1
%针对运行到利润最大值即可以终止的图表，写出了prop_policy2_v1。
%在prop_policy与prop_policy2程序中
    %对于不需要更新EYI,EYin,ProfitPart三个矩阵部分的利润计算，使用fQR2函数；
    %对于需要计算此三个矩阵的部分才使用fQR函数以降低计算量。
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy_v3(j_all,N);
fprintf("\n\n Prop_Policy_v3 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy_v3测试结果为1.5s。
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy2_v1(j_all,N);
fprintf("\n\n Prop_Policy2_v2 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy2_v1测试结果为0.5s。

%version4，也即最终版
%使用了findQ2
    %改写findQ2，删去current这一全局变量
%使用了findR2
    %使用更为精确的循环方法计算R，并利用i时期R矩阵概率和为1来减少了部分计算,并根据findR2的用法改写prop_policy与prop_policy2
%根据findQ2与R2的用法改写prop_policy与prop_policy2
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy(j_all,N);
fprintf("\n\n Prop_Policy_v4 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy_v4测试结果为0.4s。
init_time = ftimer();
[best_is,opt_profits,EYI,EYin,ProfitPart]=prop_policy2(j_all,N);
fprintf("\n\n Prop_Policy2_v4 Total Time = %.1f seconds \n", ftimer()-init_time);
%Prop_Policy2_v2测试结果为0.1s。